<!--
  * t
  ****************************************************************************
  * Copyright 2018-2024,2025 Thomas E. Dickey                                *
  * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  * "Software"), to deal in the Software without restriction, including      *
  * without limitation the rights to use, copy, modify, merge, publish,      *
  * distribute, distribute with modifications, sublicense, and/or sell       *
  * copies of the Software, and to permit persons to whom the Software is    *
  * furnished to do so, subject to the following conditions:                 *
  *                                                                          *
  * The above copyright notice and this permission notice shall be included  *
  * in all copies or substantial portions of the Software.                   *
  *                                                                          *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  *                                                                          *
  * Except as contained in this notice, the name(s) of the above copyright   *
  * holders shall not be used in advertising or otherwise to promote the     *
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************
  * @Id: curs_inopts.3x,v 1.93 2025/02/02 00:02:25 tom Exp @
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
<TITLE>curs_inopts 3x 2025-02-01 ncurses 6.5 Library calls</TITLE>
<link rel="author" href="mailto:bug-ncurses@gnu.org">

</HEAD>
<BODY>
<H1 class="no-header">curs_inopts 3x 2025-02-01 ncurses 6.5 Library calls</H1>
<PRE>
<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3x)</A></STRONG>                  Library calls                 <STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3x)</A></STRONG>




</PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
       <STRONG>cbreak</STRONG>,  <STRONG>echo</STRONG>, <STRONG>halfdelay</STRONG>, <STRONG>intrflush</STRONG>, <STRONG>is_cbreak</STRONG>, <STRONG>is_echo</STRONG>, <STRONG>is_nl</STRONG>, <STRONG>is_raw</STRONG>,
       <STRONG>keypad</STRONG>, <STRONG>meta</STRONG>, <STRONG>nl</STRONG>, <STRONG>nocbreak</STRONG>, <STRONG>nodelay</STRONG>, <STRONG>noecho</STRONG>,  <STRONG>nonl</STRONG>,  <STRONG>noqiflush</STRONG>,  <STRONG>noraw</STRONG>,
       <STRONG>notimeout</STRONG>,  <STRONG>qiflush</STRONG>,  <STRONG>raw</STRONG>,  <STRONG>timeout</STRONG>,  <STRONG>wtimeout</STRONG>, <STRONG>typeahead</STRONG> - get and set
       <EM>curses</EM> terminal input options


</PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
       <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>

       <STRONG>int</STRONG> <STRONG>cbreak(void);</STRONG>
       <STRONG>int</STRONG> <STRONG>nocbreak(void);</STRONG>

       <STRONG>int</STRONG> <STRONG>echo(void);</STRONG>
       <STRONG>int</STRONG> <STRONG>noecho(void);</STRONG>

       <STRONG>int</STRONG> <STRONG>intrflush(WINDOW</STRONG> <STRONG>*</STRONG> <EM>win</EM> <EM>/*</EM> <EM>ignored</EM> <EM>*/</EM><STRONG>,</STRONG> <STRONG>bool</STRONG> <EM>bf</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>keypad(WINDOW</STRONG> <STRONG>*</STRONG> <EM>win</EM><STRONG>,</STRONG> <STRONG>bool</STRONG> <EM>bf</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>meta(WINDOW</STRONG> <STRONG>*</STRONG> <EM>win</EM> <EM>/*</EM> <EM>ignored</EM> <EM>*/</EM><STRONG>,</STRONG> <STRONG>bool</STRONG> <EM>bf</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>nodelay(WINDOW</STRONG> <STRONG>*</STRONG> <EM>win</EM><STRONG>,</STRONG> <STRONG>bool</STRONG> <EM>bf</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>notimeout(WINDOW</STRONG> <STRONG>*</STRONG> <EM>win</EM><STRONG>,</STRONG> <STRONG>bool</STRONG> <EM>bf</EM><STRONG>);</STRONG>

       <STRONG>int</STRONG> <STRONG>nl(void);</STRONG>
       <STRONG>int</STRONG> <STRONG>nonl(void);</STRONG>

       <STRONG>void</STRONG> <STRONG>qiflush(void);</STRONG>
       <STRONG>void</STRONG> <STRONG>noqiflush(void);</STRONG>

       <STRONG>int</STRONG> <STRONG>raw(void);</STRONG>
       <STRONG>int</STRONG> <STRONG>noraw(void);</STRONG>

       <STRONG>int</STRONG> <STRONG>halfdelay(int</STRONG> <EM>tenths</EM><STRONG>);</STRONG>
       <STRONG>void</STRONG> <STRONG>timeout(int</STRONG> <EM>delay</EM><STRONG>);</STRONG>
       <STRONG>void</STRONG> <STRONG>wtimeout(WINDOW</STRONG> <STRONG>*</STRONG> <EM>win</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>delay</EM><STRONG>);</STRONG>

       <STRONG>int</STRONG> <STRONG>typeahead(int</STRONG> <EM>fd</EM><STRONG>);</STRONG>

       <EM>/*</EM> <EM>extensions</EM> <EM>*/</EM>
       <STRONG>int</STRONG> <STRONG>is_cbreak(void);</STRONG>
       <STRONG>int</STRONG> <STRONG>is_echo(void);</STRONG>
       <STRONG>int</STRONG> <STRONG>is_nl(void);</STRONG>
       <STRONG>int</STRONG> <STRONG>is_raw(void);</STRONG>


</PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
       <EM>curses</EM> offers configurable  parameters  permitting  an  application  to
       control  the  handling of input from the terminal.  Some, such as those
       affecting the terminal's <EM>mode</EM> or line discipline, are global,  applying
       to  all  windows;  others apply only to a specific window.  The library
       does not automatically apply such parameters to new or derived windows;
       an application must configure each window for the desired behavior.

       Some  descriptions  below  make reference to an <EM>input</EM> <EM>character</EM> <EM>reading</EM>
       <EM>function</EM>: this is <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG> in the non-wide character <EM>curses</EM>  API  and
       <STRONG><A HREF="curs_get_wch.3x.html">wget_wch(3x)</A></STRONG>  in  the  wide  character API.  In addition to the variant
       forms  of  these  described  in  <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG>,  the   <EM>curses</EM>   functions
       <STRONG><A HREF="curs_getstr.3x.html">wgetstr(3x)</A></STRONG>   and   <STRONG><A HREF="curs_get_wstr.3x.html">wget_wstr(3x)</A></STRONG>  and  their  own  variants  call  the
       appropriate input character reading function.


</PRE><H3><a name="h3-cbreak_nocbreak">cbreak, nocbreak</a></H3><PRE>
       Normally, the terminal driver buffers typed characters, not  delivering
       them  to  an application until a line feed or carriage return is typed.
       This canonical ("cooked") line discipline also supports  software  flow
       control,  simple  line editing functions (character and word erase, and
       whole-line erasure or "kill"), and job control.  <STRONG>cbreak</STRONG> configures  the
       terminal  in  <EM>cbreak</EM>  <EM>mode</EM>, which disables line buffering and erase and
       kill character processing -- the interrupt,  quit,  suspend,  and  flow
       control  characters are unaffected -- and makes characters typed by the
       user immediately available to the program.  <STRONG>nocbreak</STRONG> restores canonical
       ("cooked") mode.

       The  state  of  the terminal is unknown to a <EM>curses</EM> application when it
       starts; therefore, a program should call <STRONG>cbreak</STRONG> or <STRONG>nocbreak</STRONG> explicitly.
       Most interactive programs using <EM>curses</EM> set cbreak mode.  Calling <STRONG>cbreak</STRONG>
       overrides <STRONG>raw</STRONG>.  The man page for the input character  reading  function
       discusses how <STRONG>cbreak</STRONG> and <STRONG>nocbreak</STRONG> interact with <STRONG>echo</STRONG> and <STRONG>noecho</STRONG>.


</PRE><H3><a name="h3-echo_noecho">echo, noecho</a></H3><PRE>
       <STRONG>echo</STRONG>  and  <STRONG>noecho</STRONG>  determine  whether  characters typed by the user are
       written to the <EM>curses</EM> window by the input character reading function as
       they  are  typed.   <EM>curses</EM>  always  disables  the terminal driver's own
       echoing.  By default, a <EM>curses</EM> screen's echo option is set.  Authors of
       most  interactive  programs  prefer  to  do  their  own  echoing  in  a
       controlled area of the screen, or not to echo  at  all,  so  they  call
       <STRONG>noecho</STRONG>.   The  man  page  for  the  input  character  reading  function
       discusses how <STRONG>echo</STRONG> and <STRONG>noecho</STRONG> interact with <STRONG>cbreak</STRONG> and <STRONG>nocbreak</STRONG>.


</PRE><H3><a name="h3-halfdelay">halfdelay</a></H3><PRE>
       <STRONG>halfdelay</STRONG> configures <EM>half-delay</EM> <EM>mode</EM>, which is similar to  cbreak  mode
       in  that  characters typed by the user are immediately available to the
       program.  However, after blocking for <EM>tenths</EM>  tenth-seconds,  an  input
       character  reading  function  returns  <STRONG>ERR</STRONG> if no input is pending.  The
       value of <EM>tenths</EM> must be between 1 and 255.  Use <STRONG>nocbreak</STRONG> to leave half-
       delay mode.


</PRE><H3><a name="h3-intrflush">intrflush</a></H3><PRE>
       <STRONG>intrflush</STRONG>  calls <STRONG>qiflush</STRONG> (see below) if <EM>bf</EM> is <STRONG>TRUE</STRONG>, and <STRONG>noqiflush</STRONG> if <EM>bf</EM>
       is <STRONG>FALSE</STRONG>.  It ignores its <EM>win</EM> argument.


</PRE><H3><a name="h3-keypad">keypad</a></H3><PRE>
       <STRONG>keypad</STRONG> enables recognition of a terminal's function keys.   If  enabled
       (<EM>bf</EM>  is  <STRONG>TRUE</STRONG>),  the  input  character reading function returns a value
       representing the function key, such as <STRONG>KEY_LEFT</STRONG>.   (Wide-character  API
       users:  <STRONG><A HREF="curs_get_wch.3x.html">wget_wch(3x)</A></STRONG>  returns <STRONG>KEY_CODE_YES</STRONG> to indicate the availability
       of a function key code in its  <EM>wch</EM>  parameter.)   If  disabled  (<EM>bf</EM>  is
       <STRONG>FALSE</STRONG>),  <EM>curses</EM>  does not treat function keys specially and the program
       has to interpret escape sequences itself.  If the terminal's keypad can
       be  turned on (made to transmit) and off (made to work locally), <STRONG>keypad</STRONG>
       configures it consistently  with  the  <EM>bf</EM>  parameter.   By  default,  a
       window's keypad mode is off.


</PRE><H3><a name="h3-meta">meta</a></H3><PRE>
       Initially,  whether the terminal returns 7- or 8-bit character codes on
       input depends on the configuration of the  terminal  driver;  on  POSIX
       systems,  see  <STRONG>termios(3)</STRONG>.   To  force  8  bits  to  be  returned, call
       <STRONG>meta(</STRONG>...<STRONG>,</STRONG> <STRONG>TRUE)</STRONG>; this is equivalent, on POSIX systems, to  setting  the
       CS8  flag  on  the  terminal.   To  force  7  bits to be returned, call
       <STRONG>meta(</STRONG>...<STRONG>,</STRONG> <STRONG>FALSE)</STRONG>; this is equivalent, on POSIX systems, to setting  the
       CS7  flag on the terminal.  <EM>curses</EM> ignores the window argument <EM>win</EM>.  If
       the <EM>terminfo</EM> string capabilities <STRONG>meta_on</STRONG> (<STRONG>smm</STRONG>) and <STRONG>meta_off</STRONG>  (<STRONG>rmm</STRONG>)  are
       defined  for  the  terminal  type,  enabling meta mode sends <STRONG>smm</STRONG> to the
       terminal and disabling it sends <STRONG>rmm</STRONG> to the terminal.


</PRE><H3><a name="h3-nl_nonl">nl, nonl</a></H3><PRE>
       Initially, whether the terminal reports a  carriage  return  using  the
       character  code  for  a line feed in cbreak or raw modes depends on the
       configuration of the terminal driver; see  <STRONG>termios(3)</STRONG>.   <STRONG>nl</STRONG>  configures
       the terminal to perform this translation.  <STRONG>nonl</STRONG> disables it.  Under its
       canonical  ("cooked")  line  discipline,  the  terminal  driver  always
       translates carriage returns to line feeds.


</PRE><H3><a name="h3-nodelay">nodelay</a></H3><PRE>
       <STRONG>nodelay</STRONG>  configures  the  input  character  reading function to be non-
       blocking for window <EM>win</EM>.  If no input is ready,  the  reading  function
       returns  <STRONG>ERR</STRONG>.  If disabled (<EM>bf</EM> is <STRONG>FALSE</STRONG>), the reading function does not
       return until it has input.


</PRE><H3><a name="h3-notimeout">notimeout</a></H3><PRE>
       When the input character reading function reads an  ESC  character,  it
       sets  a  timer  while  waiting  for the next character.  <STRONG>notimeout(</STRONG><EM>win</EM><STRONG>,</STRONG>
       <STRONG>TRUE)</STRONG>  disables  this  timer.   The  purpose  of  the  timeout  is   to
       distinguish  sequences produced by a function key from those typed by a
       user.  To configure the timeout rather than disabling it, see  <STRONG>wtimeout</STRONG>
       below.


</PRE><H3><a name="h3-qiflush_noqiflush">qiflush, noqiflush</a></H3><PRE>
       <STRONG>qiflush</STRONG>  and <STRONG>noqiflush</STRONG> configure the terminal driver's treatment of its
       input and output queues when it handles the interrupt, suspend, or quit
       characters under the canonical ("cooked") or cbreak line disciplines on
       POSIX systems; see <STRONG>termios(3)</STRONG>.  The default behavior is inherited  from
       the  terminal driver settings.  Calling <STRONG>qiflush</STRONG> configures the terminal
       to <EM>flush</EM> the queues (discarding  their  contents)  when  any  of  these
       events  occurs, giving the impression of faster response to user input,
       but making the  library's  model  of  the  screen  contents  incorrect.
       Calling <STRONG>noqiflush</STRONG> prevents such flushing, but might frustrate impatient
       users on slow connections if a  <EM>curses</EM>  update  of  the  screen  is  in
       progress when the event occurs; see <STRONG>typeahead</STRONG> below for a mitigation of
       this problem.  You may want to call <STRONG>noqiflush</STRONG> in a signal  handler  if,
       after  the  handler  exits,  you  want output to continue as though the
       interrupt had not occurred.


</PRE><H3><a name="h3-raw_noraw">raw, noraw</a></H3><PRE>
       <STRONG>raw</STRONG> configures the terminal to read input in <EM>raw</EM> <EM>mode</EM>, which is similar
       to  cbreak  mode  (see  <STRONG>cbreak</STRONG> above) except that it furthermore passes
       through the terminal's configured interrupt, quit,  suspend,  and  flow
       control   characters  uninterpreted  to  the  application,  instead  of
       generating a signal or  acting  on  I/O  flow.   The  behavior  of  the
       terminal's   "Break"   key   (if   any)   depends  on  terminal  driver
       configuration parameters that <EM>curses</EM> does not handle.   <STRONG>noraw</STRONG>  restores
       the terminal's canonical ("cooked") line discipline.


</PRE><H3><a name="h3-timeout_wtimeout">timeout, wtimeout</a></H3><PRE>
       <STRONG>wtimeout</STRONG>  configures  whether a <EM>curses</EM> input character reading function
       called on window <EM>win</EM> uses blocking or non-blocking reads.  If <EM>delay</EM>  is
       negative,  <EM>curses</EM> uses a blocking read, waiting indefinitely for input.
       If <EM>delay</EM> is zero, the read is non-blocking; an input character  reading
       function  returns <STRONG>ERR</STRONG> if no input is pending.  If <EM>delay</EM> is positive, an
       input character reading function blocks  for  <EM>delay</EM>  milliseconds,  and
       returns  <STRONG>ERR</STRONG>  if the delay elapses and there is still no input pending.
       <STRONG>timeout</STRONG> calls <STRONG>wtimeout</STRONG> on <STRONG>stdscr</STRONG>.


</PRE><H3><a name="h3-typeahead">typeahead</a></H3><PRE>
       Normally, a <EM>curses</EM> library checks the terminal for input while updating
       the  screen.   If  any is found, the update is postponed until the next
       <STRONG><A HREF="curs_refresh.3x.html">wrefresh(3x)</A></STRONG> or <STRONG><A HREF="curs_refresh.3x.html">doupdate(3x)</A></STRONG> call, allowing faster response to user key
       strokes.   The  library  tests the file descriptor corresponding to the
       <EM>FILE</EM> stream pointer passed to <STRONG><A HREF="curs_initscr.3x.html">newterm(3x)</A></STRONG> (or <EM>stdin</EM> if <STRONG><A HREF="curs_initscr.3x.html">initscr(3x)</A></STRONG>  was
       called),  for  pending  input.  <STRONG>typeahead</STRONG> instructs <EM>curses</EM> to test file
       descriptor <EM>fd</EM> instead.  An <EM>fd</EM> of <STRONG>-1</STRONG> disables the check.


</PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
       <STRONG>timeout</STRONG> and <STRONG>wtimeout</STRONG> return no value.

       <STRONG>cbreak</STRONG>, <STRONG>nocbreak</STRONG>, <STRONG>echo</STRONG>, <STRONG>noecho</STRONG>,  <STRONG>halfdelay</STRONG>,  <STRONG>intrflush</STRONG>,  <STRONG>keypad</STRONG>,  <STRONG>meta</STRONG>,
       <STRONG>nodelay</STRONG>,  <STRONG>notimeout</STRONG>,  <STRONG>nl</STRONG>,  <STRONG>nonl</STRONG>, <STRONG>raw</STRONG>, <STRONG>noraw</STRONG>, and <STRONG>typeahead</STRONG> return <STRONG>OK</STRONG> on
       success and <STRONG>ERR</STRONG> on failure.

       In <EM>ncurses</EM>, the functions in the previous paragraph return <STRONG>ERR</STRONG> if

       <STRONG>o</STRONG>   the library's <EM>TERMINAL</EM>  structure  for  the  device  has  not  been
           initialized with <STRONG><A HREF="curs_initscr.3x.html">initscr(3x)</A></STRONG>, <STRONG><A HREF="curs_initscr.3x.html">newterm(3x)</A></STRONG>, or <STRONG><A HREF="curs_terminfo.3x.html">setupterm(3x)</A></STRONG>, or

       <STRONG>o</STRONG>   <EM>win</EM> is a null pointer (except with <STRONG>intrflush</STRONG> and <STRONG>meta</STRONG>, which ignore
           its value).

       Further, <STRONG>halfdelay</STRONG> returns <STRONG>ERR</STRONG> if <EM>delay</EM> is outside the range 1..255.

       See section "EXTENSIONS" below for  the  return  values  of  <STRONG>is_cbreak</STRONG>,
       <STRONG>is_echo</STRONG>, <STRONG>is_nl</STRONG>, and <STRONG>is_raw</STRONG>.


</PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
       <STRONG>echo</STRONG>, <STRONG>noecho</STRONG>, <STRONG>halfdelay</STRONG>, <STRONG>intrflush</STRONG>, <STRONG>meta</STRONG>, <STRONG>nl</STRONG>, <STRONG>nonl</STRONG>, <STRONG>nodelay</STRONG>, <STRONG>notimeout</STRONG>,
       <STRONG>noqiflush</STRONG>, <STRONG>qiflush</STRONG>, <STRONG>timeout</STRONG>, and <STRONG>wtimeout</STRONG> may be implemented as macros.

       <STRONG>noraw</STRONG> and <STRONG>nocbreak</STRONG> follow historical practice in that they  attempt  to
       restore  the  terminal's  canonical ("cooked") line discipline from raw
       and cbreak, respectively.  Mixing <STRONG>raw</STRONG>/<STRONG>noraw</STRONG> calls with  <STRONG>cbreak</STRONG>/<STRONG>nocbreak</STRONG>
       calls  leads to terminal driver control states that are hard to predict
       or understand; doing so is not recommended.


</PRE><H2><a name="h2-EXTENSIONS">EXTENSIONS</a></H2><PRE>
       <EM>ncurses</EM> provides four "is_" functions corresponding  to  <STRONG>cbreak</STRONG>,  <STRONG>echo</STRONG>,
       <STRONG>nl</STRONG>, and <STRONG>raw</STRONG>, permitting their states to be queried by the application.

                            <STRONG>Query</STRONG>       <STRONG>Set</STRONG>      <STRONG>Reset</STRONG>
                            ------------------------------
                            is_cbreak   cbreak   nocbreak
                            is_echo     echo     noecho
                            is_nl       nl       nonl
                            is_raw      raw      noraw

       In each case, the function returns

       <STRONG>1</STRONG>    if the option is set,

       <STRONG>0</STRONG>    if the option is unset, or

       <STRONG>-1</STRONG>   if  the  library's  <EM>TERMINAL</EM> structure for the device has not been
            initialized.


</PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
       Applications employing <EM>ncurses</EM> extensions should condition their use on
       the visibility of the <STRONG>NCURSES_VERSION</STRONG> preprocessor macro.

       Except  as  noted  in section "EXTENSIONS" above, X/Open Curses Issue 4
       describes these functions.  It specifies no error conditions for them.

       SVr4 describes a successful return value  only  as  "an  integer  value
       other than <EM>ERR</EM>".

       <EM>ncurses</EM>  follows  X/Open Curses and the historical practice of System V
       <EM>curses</EM>, clearing the terminal driver's "echo"  flag  when  initializing
       the  screen.  BSD <EM>curses</EM> did not, but its <EM>raw</EM> function turned it off as
       a side effect.  For best portability, call <STRONG>echo</STRONG>  or  <STRONG>noecho</STRONG>  explicitly
       just  after initialization, even if your program retains the terminal's
       canonical ("cooked") line discipline.

       X/Open Curses is ambiguous regarding whether  <EM>raw</EM>  should  disable  the
       carriage  return and line feed translation feature controlled by <EM>nl</EM> and
       <EM>nonl</EM>.  BSD <EM>curses</EM> did turn off these translations; System V <EM>curses</EM>  did
       not.   <EM>ncurses</EM>  does so, on the assumption that a programmer requesting
       raw input wants a clean (ideally,  8-bit  clean)  connection  that  the
       operating system will not alter.

       When <STRONG>keypad</STRONG> is first enabled, <EM>ncurses</EM> loads the key definitions for the
       current terminal description.  If  the  terminal  description  includes
       extended  string  capabilities,  for example, by using the <STRONG>-x</STRONG> option of
       <STRONG><A HREF="tic.1m.html">tic(1)</A></STRONG>, then <EM>ncurses</EM> also defines keys for the capabilities whose names
       begin  with  "k".  Corresponding key codes are generated and (depending
       on previous  loads  of  terminal  descriptions)  may  differ  from  one
       execution  of  a  program  to  the  next.   The generated key codes are
       recognized by <STRONG><A HREF="curs_util.3x.html">keyname(3x)</A></STRONG>, which then returns a name beginning with "k"
       denoting  the <EM>terminfo</EM> capability name rather than "K", used for <EM>curses</EM>
       key names.  On the other hand, an application can use <STRONG><A HREF="define_key.3x.html">define_key(3x)</A></STRONG> to
       bind  a  specific  key  to  a  string of the programmer's choice.  This
       feature  enables  an  application  to  check  for  its  presence   with
       <STRONG><A HREF="curs_terminfo.3x.html">tigetstr(3x)</A></STRONG>, and reassign the key code to match its own needs.

       Low-level applications can use <STRONG><A HREF="curs_terminfo.3x.html">tigetstr(3x)</A></STRONG> to obtain the definition of
       any string capability.  <EM>curses</EM> applications  use  the  input  character
       reading function to obtain key codes from input and rely upon the order
       in which the string capabilities are loaded.  Multiple  key  capability
       strings  can  have  the  same  value,  but  the input character reading
       function can report only one key  code.   Most  <EM>curses</EM>  implementations
       (including  <EM>ncurses</EM>)  load  key definitions in the order they appear in
       the <STRONG>strfnames</STRONG> array of string capability names; see <STRONG><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>.
       The  last  capability read using a particular definition determines the
       key code to be reported.  In  <EM>ncurses</EM>,  extended  capabilities  can  be
       interpreted  as key definitions.  These are loaded after the predefined
       keys, and if a capability's value is the same as  a  previously  loaded
       key definition, the library uses the later definition.


</PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
       4BSD (1980) introduced <EM>echo</EM>, <EM>noecho</EM>, <EM>nl</EM>, <EM>nonl</EM>, <EM>raw</EM>, and <EM>noraw</EM>.

       SVr2 (1984) featured a new terminal driver, extending the <EM>curses</EM> API to
       support it with <EM>cbreak</EM>, <EM>nocbreak</EM>, <EM>intrflush</EM>, <EM>keypad</EM>, <EM>meta</EM>, <EM>nodelay</EM>, and
       <EM>typeahead</EM>.

       SVr3  (1987)  added  <EM>halfdelay</EM>,  <EM>notimeout</EM>,  and <EM>wtimeout</EM>.  <EM>qiflush</EM> and
       <EM>noqiflush</EM> appeared in SVr3.1 (1987), at which point <EM>intrflush</EM> became  a
       wrapper  for  either  of these functions, depending on the value of its
       Boolean argument.  SVr3.1 also added <EM>timeout</EM>.

       <EM>ncurses</EM> 6.5 (2024) introduced <EM>is</EM><STRONG>_</STRONG><EM>cbreak</EM>, <EM>is</EM><STRONG>_</STRONG><EM>echo</EM>, <EM>is</EM><STRONG>_</STRONG><EM>nl</EM>, and <EM>is</EM><STRONG>_</STRONG><EM>raw</EM>.

       Formerly, <EM>ncurses</EM> used  <EM>nl</EM>  and  <EM>nonl</EM>  to  control  the  conversion  of
       newlines  to  carriage  return/line  feed  on  output as well as input.
       X/Open Curses documents the use of  these  functions  only  for  input.
       This  difference arose from converting the <EM>pcurses</EM> source (1986), which
       used <STRONG>ioctl(2)</STRONG> calls and the <EM>sgttyb</EM> structure,  to  <EM>termios</EM>  (the  POSIX
       terminal  API).   In  the former, both input and output were controlled
       via a single option "CRMOD", while the latter separates these features.
       Because  that  conversion  interferes with output optimization, <EM>ncurses</EM>
       6.2 (2020) amended <EM>nl</EM> and <EM>nonl</EM> to eliminate their effect on output.


</PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
       <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>,    <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG>,     <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>,     <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>,
       <STRONG><A HREF="define_key.3x.html">define_key(3x)</A></STRONG>, <STRONG>termios(3)</STRONG>, <STRONG><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>



ncurses 6.5                       2025-02-01                   <STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3x)</A></STRONG>
</PRE>
<div class="nav">
<ul>
<li><a href="#h2-NAME">NAME</a></li>
<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
<ul>
<li><a href="#h3-cbreak_nocbreak">cbreak, nocbreak</a></li>
<li><a href="#h3-echo_noecho">echo, noecho</a></li>
<li><a href="#h3-halfdelay">halfdelay</a></li>
<li><a href="#h3-intrflush">intrflush</a></li>
<li><a href="#h3-keypad">keypad</a></li>
<li><a href="#h3-meta">meta</a></li>
<li><a href="#h3-nl_nonl">nl, nonl</a></li>
<li><a href="#h3-nodelay">nodelay</a></li>
<li><a href="#h3-notimeout">notimeout</a></li>
<li><a href="#h3-qiflush_noqiflush">qiflush, noqiflush</a></li>
<li><a href="#h3-raw_noraw">raw, noraw</a></li>
<li><a href="#h3-timeout_wtimeout">timeout, wtimeout</a></li>
<li><a href="#h3-typeahead">typeahead</a></li>
</ul>
</li>
<li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
<li><a href="#h2-NOTES">NOTES</a></li>
<li><a href="#h2-EXTENSIONS">EXTENSIONS</a></li>
<li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
<li><a href="#h2-HISTORY">HISTORY</a></li>
<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
</ul>
</div>
</BODY>
</HTML>
